<?php
//------------------------------------------------------------ Contraintes d'accès de la page

	// on vérifie que cette page est appelée à partir de l'index et que l'utilisateur a le droit de modification
	if(isset($_SESSION) && ($GLOBALS['USER']['level'] >= 4 || $GLOBALS['USER']['admin'])){
	
		// l'identifiant de la donnée à supprimer est indiqué par un entier
		if(isset($_GET['id']) && numericInt($_GET['id'])){
		
			$nb_personnes = valueExists((int)$_GET['id'], "CODEPERSONNE", "personne", $connexion);
			
			if($nb_personnes == 1){ // la personne à éditer existe et son identifiant est unique
			
	
?>
<?php
//------------------------------------------------------------ Valeur des champs avant saisie

	// récupération des informations de la personne
	$query_recuperation_personne = "SELECT p.NOMPERSONNE, p.PRENOMPERSONNE, p.EMAILPERSONNE, p.ADRESSEPERSONNE, p.TELPORTABLE, p.TELBUREAU, p.COMMENTAIRE , c.CODEPOSTAL, c.NOMCOMMUNE, a.NOMPAYS, s.CODESTRUCTURE ";
	$query_recuperation_personne .= "FROM personne p ";
	$query_recuperation_personne .= "LEFT JOIN commune c INNER JOIN pays a ON c.CODEPAYS = a.CODEPAYS ON p.CODECOMMUNE = c.CODECOMMUNE ";
	$query_recuperation_personne .= "LEFT JOIN structure s ON p.CODESTRUCTURE = s.CODESTRUCTURE ";
	$query_recuperation_personne .= "LEFT JOIN infos_utilisateur u ON u.CODEPERSONNE = p.CODEPERSONNE ";
	$query_recuperation_personne .= "WHERE p.CODEPERSONNE = ".$_GET['id']." ";
	
	$result_recuperation_personne = mysql_query($query_recuperation_personne, $connexion) or logError("RECUPERATION PERSONNE-".$query_recuperation_personne."-".mysql_error());
	
	$tab_recuperation_personne = mysql_fetch_row($result_recuperation_personne);

	$dv_nom = $tab_recuperation_personne[0]; // valeur du champ nom (edt_nom)
	$dv_prenom = $tab_recuperation_personne[1]; // valeur du champ prenom (edt_prenom)
	$dv_email = $tab_recuperation_personne[2]; // valeur du champ e-mail (edt_email)
	// valeur du champ adesse (edt_adresse)
	if(is_null($tab_recuperation_personne[3])){
		$dv_adresse = "N°, Voie";
	}else{
		$dv_adresse = $tab_recuperation_personne[3];
	}
	// valeur du champ code postal (edt_cp)
	if(is_null($tab_recuperation_personne[7])){
		$dv_cp = "CP";
	}else{
		$dv_cp = $tab_recuperation_personne[7];
	}
	// valeur du champ ville (edt_ville)
	if(is_null($tab_recuperation_personne[8])){
		$dv_ville = "Ville";
	}else{
		$dv_ville = $tab_recuperation_personne[8];
	}
	// valeur du champ pays (edt_pays)
	if(is_null($tab_recuperation_personne[9])){
		$dv_pays = "Pays";
	}else{
		$dv_pays = $tab_recuperation_personne[9];
	}
	$dv_telperso = $tab_recuperation_personne[4]; // valeur du champ teléphone personnel (edt_telperso)
	$dv_telbureau = $tab_recuperation_personne[5]; // valeur du champ téléphone bureau (edt_telbureau)
	$dv_commentaire = $tab_recuperation_personne[6]; // valeur du champ commentaire (edt_commentaire)
	$dv_structure = (int)$tab_recuperation_personne[10]; // valeur du champ travail pour (edt_structure)
	
	mysql_free_result($result_recuperation_personne);
	
	// valeurs possibles du champ edt_structure
	$query_recuperation_structures = "SELECT CODESTRUCTURE AS id, NOMSTRUCTURE AS nom FROM structure ORDER BY nom";
	
	$result_recuperation_structures =  mysql_query($query_recuperation_structures, $connexion) or logError("RECUPERATION STRUCTURES-".$query_recuperation_structures."-".mysql_error());

	$selectStructures = array(); // on créé un tableau qui contient la liste des structures ainsi que les informations de chacune
	$nb_structures = 0;
	while($tab_recuperation_structures = mysql_fetch_assoc($result_recuperation_structures)){
		$selectStructures[$nb_structures] = $tab_recuperation_structures;
		$nb_structures++;
	}
	
	mysql_free_result($result_recuperation_structures);
	
?>
<?php
//------------------------------------------------------------ Traitements si le formulaire a été envoyé

/********************************* Règles :

	- id doit désigner une seule personne
	- La personne doit exister dans la BDD
	- La personne ne doit pas être l'utilisateur
	- nom, prénom, email ne peuvent pas être vide
	- email et téléphones doivent avoir un format valide
	- si elle est indiquée, la structure de travail doit désigner une structure de la base de donnée

*****************************************/

	$statut = array(); // indique le statut du traitement du formulaire (echec ou succes) - tableau contenant les messages à afficher
	$erreur = false; // indique si une erreur a été rencontrée lors du traitement

	trimTabByKey($_POST, "edt_"); // appel à la fonction trimTabByKey() définie dans fonctions.php
	
	//---------------------------------- Contrôle des données ----------------------------------
	
	if(isset($_POST['form_sent'])){ // si le formulaire est envoyé
			
		// Contrôle des données du nom
		if(isset($_POST['edt_nom']) && is_string($_POST['edt_nom'])){
			if(emptyString($_POST['edt_nom'])){
				$statut[] = "Le nom ne peut être effacé";
				$erreur = true;
			}else{
				if(isNameFormat($_POST['edt_nom'])){
					$dv_nom = $_POST['edt_nom'];
				}else{
					$statut[] = "Format du nom incorrect";
					$erreur = true;
				}
			}
		}else{
			$statut[] = "Aucun nom indiqué";
			$erreur = true;
		}
		
		// Contrôle des données du prénom
		if(isset($_POST['edt_prenom']) && is_string($_POST['edt_prenom'])){
			if(emptyString($_POST['edt_prenom'])){
				$statut[] = "Le prénom ne peut être effacé";
				$erreur = true;
			}else{
				if(isNameFormat($_POST['edt_prenom'])){
					$dv_prenom = $_POST['edt_prenom'];
				}else{
					$statut[] = "Format du prénom incorrect";
					$erreur = true;
				}
			}
		}else{
			$statut[] = "Aucun prénom indiqué";
			$erreur = true;
		}
		
		// Contrôle des données de l'adresse e-mail
		if(isset($_POST['edt_email']) && is_string($_POST['edt_email'])){
			if(!emptyString($_POST['edt_email'])){
				if(!isEmailFormat($_POST['edt_email'])){
					$statut[] = "Format de l'adresse e-mail incorrect";
					$erreur = true;
				}else{
					$dv_email = $_POST['edt_email'];
				}
			}
		}else{
			$statut[] = "Aucune adresse e-mail indiquée";
			$erreur = true;
		}
		
		// Contrôle des données de l'adresse de résidence
		if(isset($_POST['edt_adresse']) && is_string($_POST['edt_adresse'])){
			if($_POST['edt_adresse'] == "N°, Voie" || emptyString($_POST['edt_adresse'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
				$_POST['edt_adresse'] = "";
				$dv_adresse = "N°, Voie";
			}else{
				$dv_adresse = $_POST['edt_adresse'];
			}
		}else{
			$statut[] = "Aucune adresse de domicile indiquée";
			$erreur = true;
		}
		
		// Contrôle des données du pays, du code postal  et de la ville de résidence
		$communeIndiquee = false; // variable indiquant si l'utilisateur a saisi la commune de résidence
		if(isset($_POST['edt_cp']) && is_string($_POST['edt_cp']) && isset($_POST['edt_ville']) && is_string($_POST['edt_ville']) && isset($_POST['edt_pays']) && is_string($_POST['edt_pays'])){
			if($_POST['edt_cp'] == "CP" || emptyString($_POST['edt_cp'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
				$_POST['edt_cp'] = "";
				$dv_cp = "CP";
			}
			if($_POST['edt_ville'] == "Ville" || emptyString($_POST['edt_ville'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
				$_POST['edt_ville'] = "";
				$dv_ville = "Ville";
			}
			if($_POST['edt_pays'] == "Pays" || emptyString($_POST['edt_pays'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
				$_POST['edt_pays'] = "";
				$dv_pays = "Pays";
			}
			if(!emptyString($_POST['edt_ville']) && !emptyString($_POST['edt_cp']) && !emptyString($_POST['edt_pays'])){ // Code postal, Ville et Pays sont indiqués
				$communeIndiquee = true;
				if(!isPostalFormat($_POST['edt_cp'])){
					$statut[] = "Format du code postal incorrect";
					$erreur = true;
				}else{
					$dv_cp = $_POST['edt_cp'];
				}
				if(!isNameFormat($_POST['edt_ville'])){
					$statut[] = "Format de la ville incorrect";
					$erreur = true;
				}else{
					$dv_ville = $_POST['edt_ville'];
				}
				if(!isNameFormat($_POST['edt_pays'])){
					$statut[] = "Format du pays de résidence incorrect";
					$erreur = true;
				}else{
					$dv_pays = $_POST['edt_pays'];
				}
			}else if(!emptyString($_POST['edt_ville']) || !emptyString($_POST['edt_cp']) || !emptyString($_POST['edt_pays'])){ // Parmus Code postal, Ville et Pays, au moins un n'est pas vide
				$statut[] = "La ville, son code postal et le pays doivent être indiqués";
				$erreur = true;
			}
		}else{
			$statut[] = "Aucune ville et pays de résidence indiqués";
			$erreur = true;
		}
		
		// Contrôle des données du numéro de téléphone personnel
		if(isset($_POST['edt_telperso']) && is_string($_POST['edt_telperso'])){
			if(!emptyString($_POST['edt_telperso'])){
				if(!isPhoneFormat($_POST['edt_telperso'])){
					$statut[] = "Format du numéro de téléphone personnel incorrect";
					$erreur = true;
				}else{
					$dv_telperso = $_POST['edt_telperso'];
				}
			}else{
				$dv_telperso = $_POST['edt_telperso'];
			}
		}else{
			$statut[] = "Aucun numéro de téléphone personnel indiqué";
			$erreur = true;
		}
		
		// Contrôle des données du numéro de téléphone du bureau
		if(isset($_POST['edt_telbureau']) && is_string($_POST['edt_telbureau'])){
			if(!emptyString($_POST['edt_telbureau'])){
				if(!isPhoneFormat($_POST['edt_telbureau'])){
					$statut[] = "Format du numéro de téléphone de bureau incorrect";
					$erreur = true;
				}else{
					$dv_telbureau = $_POST['edt_telbureau'];
				}
			}else{
				$dv_telbureau = $_POST['edt_telbureau'];
			}
		}else{
			$statut[] = "Aucun numéro de téléphone de bureau indiqué";
			$erreur = true;
		}
		
		// Contrôle des données de la structure où travaille la personne
		if(isset($_POST['edt_structure']) && is_string($_POST['edt_structure'])){
			if(!numericInt($_POST['edt_structure']) && $_POST['edt_structure'] != "none"){
				$statut[] = "Format du type de structure incorrect";
				$erreur = true;
			}else{
				if($_POST['edt_structure'] != "none"){
					if(valueExists((int)$_POST['edt_structure'], "CODESTRUCTURE", "structure", $connexion) == 1){
						$dv_structure = $_POST['edt_structure'];
					}else{
						$statut[] = "La structure indiquée n'existe pas";
						$erreur = true;
					}
				}else{
					$dv_structure = null;
				}
			}
		}else{
			$statut[] = "Aucune structure de travail indiquée";
			$erreur = true;
		}
		
		// Contrôle des données du commentaire
		if(isset($_POST['edt_commentaire']) && is_string($_POST['edt_commentaire'])){ 
			$dv_commentaire = $_POST['edt_commentaire'];
		}else{
			$statut[] = "Aucun commentaire indiqué";
			$erreur = true;
		}
		
		//---------------------------------- Modification de la personne ----------------------------------
	
		if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
		
			if($communeIndiquee){ // Si le pays , la ville et son code postal sont indiqués

				// on vérifie si le pays existe déjà
				$query_recuperation_pays_existe = "SELECT CODEPAYS FROM pays WHERE NOMPAYS = ".mysqlString($_POST['edt_pays']);
				$result_recuperation_pays_existe = mysql_query($query_recuperation_pays_existe, $connexion) or logError("RECUPERATION PAYS EXISTE-".$query_recuperation_pays_existe."-".mysql_error());
				if(mysql_num_rows($result_recuperation_pays_existe) > 0){ // le pays existe
					$tab_recuperation_pays_existe = mysql_fetch_row($result_recuperation_pays_existe);
					$idPays = $tab_recuperation_pays_existe[0];
				}else{ // le pays n'existe pas
					// On créé le nouveau pays
					$query_creation_pays = "INSERT INTO pays(NOMPAYS) VALUES(".mysqlString($_POST['edt_pays']).")";
					$result_creation_pays = mysql_query($query_creation_pays, $connexion) or logError("CREATION PAYS-".$query_creation_pays."-".mysql_error());
					
					if($result_creation_pays === true){
						$idPays = valueMax("CODEPAYS", "pays", $connexion);
					}else{
						$statut[] = "Erreur critique lors de la modification de la personne";
						$erreur = true;
					}
				}
				mysql_free_result($result_recuperation_pays_existe);
				
				if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
				
					// on vérifie si la commune existe déjà
					$query_recuperation_commune_existe = "SELECT CODECOMMUNE FROM commune WHERE NOMCOMMUNE = ".mysqlString($_POST['edt_ville'])." AND CODEPOSTAL = ".mysqlString($_POST['edt_cp']);
					$result_recuperation_commune_existe = mysql_query($query_recuperation_commune_existe, $connexion) or logError("RECUPERATION COMMUNE EXISTE-".$query_recuperation_commune_existe."-".mysql_error());
					if(mysql_num_rows($result_recuperation_commune_existe) > 0){ // la commune existe
						$tab_recuperation_commune_existe = mysql_fetch_row($result_recuperation_commune_existe);
						$idCommune = $tab_recuperation_commune_existe[0];
					}else{ // la commune n'existe pas
						// On créé la nouvelle commune
						$query_creation_commune = "INSERT INTO commune(NOMCOMMUNE, CODEPOSTAL, CODEPAYS) VALUES(".mysqlString($_POST['edt_ville']).", ".mysqlString($_POST['edt_cp']).", ".$idPays.")";
						$result_creation_commune = mysql_query($query_creation_commune, $connexion) or logError("CREATION COMMUNE-".$query_creation_commune."-".mysql_error());
						
						if($result_creation_commune === true){
							$idCommune = valueMax("CODECOMMUNE", "commune", $connexion);
						}else{
							$statut[] = "Erreur critique lors de la modification de la personne";
							$erreur = true;
						}
					}
					mysql_free_result($result_recuperation_commune_existe);
				
				}
				
			}
		
			if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
		
				// Modification des informations de la table PERSONNE
				$query_modification_personne = "UPDATE personne ";
				$query_modification_personne .= "SET NOMPERSONNE = ".mysqlString($_POST['edt_nom'])." , PRENOMPERSONNE = ".mysqlString($_POST['edt_prenom'])." , EMAILPERSONNE = ".mysqlString($_POST['edt_email'])." , ADRESSEPERSONNE = ".mysqlString($_POST['edt_adresse'])." , TELBUREAU = ".mysqlString($_POST['edt_telbureau'])." , TELPORTABLE = ".mysqlString($_POST['edt_telperso'])." , COMMENTAIRE = ".mysqlString($_POST['edt_commentaire'])." ";
				if($communeIndiquee){
					$query_modification_personne .= ", CODECOMMUNE = ".$idCommune." ";
				}else{
					$query_modification_personne .= ", CODECOMMUNE = NULL ";
				}
				if($_POST['edt_structure'] == "none"){
					$query_modification_personne .= ", CODESTRUCTURE = NULL ";
				}else{
					$query_modification_personne .= ", CODESTRUCTURE = ".$_POST['edt_structure']." ";
				}
				$query_modification_personne .= "WHERE CODEPERSONNE = ".$_GET['id']." ";
				
				$result_modification_personne = mysql_query($query_modification_personne, $connexion) or logError("MODIFICATION PERSONNE-".$query_modification_personne."-".mysql_error());
				
				// Vérification du résultat des modifications
				if($result_modification_personne === true){
					$statut[] = "Les informations de la personne ont été modifiées";
					logAction("PERSONNE (id: ".$_GET['id'].") MODIFIE par ".capitalise($GLOBALS['USER']['prenom'])." ".mb_strtoupper($GLOBALS['USER']['nom'])." (".$GLOBALS['USER']['login'].")");
				}else{
					$statut[] = "Erreur critique lors de la modification de la personne";
					$erreur = true;
				}
				
			}
		
		}
		
	}
?>
<?php
//------------------------------------------------------------ Affichage du statut si le formulaire a été envoyé

	if(isset($_POST['form_sent'])){ // si le formulaire est envoyé
	
		if($erreur){
			afficherStatut($statut, 3); // appel à la fonction afficherStatut() définie dans fonctions.php
		}else{
			afficherStatut($statut, 1); // appel à la fonction afficherStatut() définie dans fonctions.php
		}
	
	}

?>
<?php
	boutonRetour("index.php?p=gestion/personne_gere"); // appel à la fonction boutonRetour() définie dans fonctions.php
?>
<form method="post" action="index.php?p=gestion/personne_edite&amp;id=<?php echo $_GET['id']; ?>">
	<table class="formulaire" style="margin-left: auto; margin-right: auto;">
		<tr>
			<th class="titre" colspan="2">Modification des informations d'une personne</th>
		</tr>
		<tr>
			<th class="sous_titre" colspan="2">informations personnelles</th>
		</tr>
		<tr>
			<td style="width: 120px" class="etiquette">Nom * :</td>
			<td style="width: 375px" class="champ"><input type="text" name="edt_nom" size="25" value="<?php echo htmlentities($dv_nom, ENT_COMPAT, "UTF-8"); ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Prénom * :</td>
			<td class="champ"><input type="text" name="edt_prenom" size="25" value="<?php echo htmlentities($dv_prenom, ENT_COMPAT, "UTF-8"); ?>" /></td>
		</tr>
		<tr>
			<th class="sous_titre" colspan="2">contact</th>
		</tr>
		<tr>
			<td class="etiquette">E-mail :</td>
			<td class="champ"><input type="text" name="edt_email" size="25" value="<?php echo htmlentities($dv_email, ENT_COMPAT, "UTF-8"); ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Adresse :</td>
			<td class="champ">
				<input id="edt_adresse" name="edt_adresse" type="text" size="25" value="<?php echo htmlentities($dv_adresse, ENT_COMPAT, "UTF-8"); ?>" onfocus="clearField('edt_adresse', 'N°, Voie');" onblur="resetField('edt_adresse', 'N°, Voie');" /><br />
				<input id="edt_cp" name="edt_cp" type="text" size="5" value="<?php echo htmlentities($dv_cp, ENT_COMPAT, "UTF-8"); ?>" onfocus="clearField('edt_cp', 'CP');" onblur="resetField('edt_cp', 'CP');" onkeyup="afficherListeCommunes('edt_ville', 'edt_cp', 'edt_pays', 'lst_communes', true);" /> - <input id="edt_ville" name="edt_ville" type="text" size="12" value="<?php echo htmlentities($dv_ville, ENT_COMPAT, "UTF-8"); ?>" onfocus="clearField('edt_ville', 'Ville');" onblur="resetField('edt_ville', 'Ville');" onkeyup="afficherListeCommunes('edt_ville', 'edt_cp', 'edt_pays', 'lst_communes', true);" /><br />
				<input id="edt_pays" name="edt_pays" type="text" size="20" value="<?php echo htmlentities($dv_pays, ENT_COMPAT, "UTF-8"); ?>" onfocus="clearField('edt_pays', 'Pays');" onblur="resetField('edt_pays', 'Pays');" onkeyup="afficherListeCommunes('edt_ville', 'edt_cp', 'edt_pays', 'lst_communes', true);" />
				<div style="position: relative;">
					<div id="lst_communes" class="infobulle" style="position: absolute; top: 0; left: 0; display: none;">
						<div class="titre"><span id="lst_communes-titre">Villes suggérées :</span><div style="position: absolute; top: 3px; right: 3px; font-size: 12px; font-weight: bold; font-style: normal;">[<a href="#" onclick="document.getElementById('lst_communes').style.display='none'; return false;">X</a>]</div></div>
						<div id="lst_communes-contenu" class="contenu"></div>
					</div>
				</div>
			</td>
		</tr>
		<tr>
			<td class="etiquette">Téléphone :</td>
			<td class="champ">
				<input type="text" name="edt_telperso" size="25" value="<?php echo htmlentities($dv_telperso, ENT_COMPAT, "UTF-8"); ?>" /> <label>(Personnel)</label><br />
				<input type="text" name="edt_telbureau" size="25" value="<?php echo htmlentities($dv_telbureau, ENT_COMPAT, "UTF-8"); ?>" /> <label>(Bureau)</label><br />
				(uniquement des chiffres, tous attachés)
			</td>
		</tr>
		<tr>
			<th class="sous_titre" colspan="2">relation</th>
		</tr>
		<tr>
			<td class="etiquette">Travail pour :</td>
			<td class="champ">
				<select name="edt_structure">
					<option value="none" <?php if(is_null($dv_structure)) echo "selected=\"selected\""; ?>>aucune structure</option>
					<optgroup label="Structures :">
					<?php
						if($nb_structures > 0){
							foreach($selectStructures as $structure){
								if($structure['id'] == $dv_structure){
									echo "<option value=\"".$structure['id']."\" selected=\"selected\">".htmlentities($structure['nom'], ENT_NOQUOTES, "UTF-8")."</option>";
								}else{
									echo "<option value=\"".$structure['id']."\">".htmlentities($structure['nom'], ENT_NOQUOTES, "UTF-8")."</option>";
								}
							}
							unset($structure);
						}else{
							echo "<option disabled=\"disabled\">Aucune structure enregistrée</option>";
						}
					?>
					</optgroup>
				</select>
			</td>
		</tr>
		<tr>
			<th class="sous_titre" colspan="2">informations complémentaires</th>
		</tr>
		<tr>
			<td class="etiquette">Commentaire :</td>
			<td class="champ"><textarea name="edt_commentaire" rows="2" cols="25"><?php echo htmlentities($dv_commentaire, ENT_COMPAT, "UTF-8"); ?></textarea></td>
		</tr>
		<tr>
			<td class="envoi" colspan="2"><input type="submit" value="Modifier" /><input type="hidden" name="form_sent" value="1" /></td>
		</tr>
		<tr>
			<td class="legende" colspan="2">* = champs obligatoires</td>
		</tr>
	</table>
</form>
<?php
//------------------------------------------------------------ Accès refusé à la page


			}else{
				afficherStatut("La persone à éditer n'existe pas", 3); // appel à la fonction afficherStatut() définie dans fonctions.php
			}

		}else{
			afficherStatut("La personne à éditer n'est pas ou mal indiqué", 3); // appel à la fonction afficherStatut() définie dans fonctions.php
		}

	}else{
		if(isset($_SESSION)){
			if(!isset($_SESSION['user_id'])){ // si l'utilisateur n'est pas connecté
				include("pages/connexion.php");
			}else{ // si l'utilisateur est connecté et qu'il n'a pas accès à la page, c'est qu'il n'a pas le droit d'utilisation nécessaire
				include("pages/401.htm");
			}
		}
	}

?>